/*
 * Vent_RegAbonos.java
 *
 * Created on 15 de agosto de 2008, 03:04 PM
 */

package administrador;

import java.awt.event.KeyListener;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.TableModel;

/**
 *
 * @author  daniel1
 */
public class Vent_RegAbonoSep extends javax.swing.JFrame {
Conexion conexion;
String cod_cliente;
String fecha;
String hora;
int cod_Cuenta=0;
Vent_Separaciones vent_Sep;

Usuario user;
String bandera;

Facturacion facturaVent;

    /** Creates new form Vent_RegAbonos */
    public Vent_RegAbonoSep(Conexion cEnt,String cod_cliente,Vent_Separaciones vEnt,Usuario user,Facturacion factEnt) {
        facturaVent=factEnt;
        this.user=user;
        vent_Sep=vEnt;
        this.conexion=cEnt;
        this.cod_cliente=cod_cliente;
        initComponents();
        setBounds(100,100,549,300);
        setVisible(true);
        refrescar(); 
        seleccionarCombo();
    }
    
    
    
    public void seleccionarCombo() {
    
    try{
        
      
            int seleccion=vent_Sep.tabla.getSelectedRow();
            String codigo=vent_Sep.tabla.getValueAt(seleccion,0).toString();
            //Selecciono la opcion en el combobox
            int numero=cb_factura.getItemCount();
            for(int i=0;i<numero;i++){
               String etiqueta=cb_factura.getItemAt(i).toString().substring(0,2);
              //System.out.println("Compara="+codigo.replaceAll(" ","")+"|"+etiqueta.replaceAll(" ",""));
               if(codigo.replaceAll(" ","").equals(etiqueta.replaceAll(" ",""))){
               cb_factura.setSelectedIndex(i);    
               break;
               
               }
               
            }
            
           
            
        
         

    }catch(Exception e){
    System.err.println("No se selecciono en la ventana de deudas una deuda, se cargan todas");
    }
    }
    
    
    
    public void refrescar(){
        
        llenarFacturas();
        fecha=new java.sql.Date(System.currentTimeMillis()).toString();
        hora=new java.sql.Time(System.currentTimeMillis()).toString();
        txt_hora.setText(hora);
        txt_fecha.setText(fecha);
        txt_resp.setText(user.nombre);
       
    }

    public void llenarFacturas(){
        //limpio camposlbl
        cb_factura.removeAllItems();
        txt_fecha.setText("");
        txt_hora.setText("");
        txt_valor.setText("");
        txt_resp.setText("");
        
       //Encuentro las factura y valores del cliente:
            ResultSet resp = conexion.consultarBase("SELECT codigo,fecha,total,saldo FROM separado  where cod_cliente like '" + cod_cliente + "';");
            String NumCuent="";
            double valor=0;
            Date fecha;
        try {
            resp.beforeFirst();
            while (resp.next()) {
                NumCuent=resp.getString("codigo");
                valor=resp.getDouble("saldo");
                fecha=resp.getDate("fecha");
                
                String etiqueta=NumCuent+"  "+" "+fecha+" "+valor;
                //LLeno el Combo de Facturassplit
                cb_factura.addItem(etiqueta);
                
            }
            //cb_factura.
        } catch (SQLException ex) {
            Logger.getLogger(Vent_RegAbonos.class.getName()).log(Level.SEVERE, null, ex);
        }
    //cb_factura.
        
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        cb_factura = new javax.swing.JComboBox();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        lbl_saldo = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        lbl_valor = new javax.swing.JLabel();
        bt_registrar = new javax.swing.JButton();
        txt_resp = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        txt_fecha = new javax.swing.JTextField();
        txt_hora = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        txt_valor = new javax.swing.JTextField();
        txt_clave = new javax.swing.JPasswordField();
        jLabel7 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Registro de Abono", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14), new java.awt.Color(0, 153, 0))); // NOI18N
        jPanel1.setLayout(null);

        cb_factura.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cb_facturaItemStateChanged(evt);
            }
        });
        cb_factura.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cb_facturaActionPerformed(evt);
            }
        });
        jPanel1.add(cb_factura);
        cb_factura.setBounds(100, 30, 220, 20);

        jLabel1.setText("Factura:");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(20, 30, 70, 20);

        jLabel2.setText("Valor:");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(50, 90, 28, 20);

        jLabel3.setText("Responsable:");
        jPanel1.add(jLabel3);
        jLabel3.setBounds(50, 120, 70, 20);

        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel2.setLayout(null);

        jLabel4.setText("Deuda:");
        jPanel2.add(jLabel4);
        jLabel4.setBounds(10, 10, 50, 14);

        lbl_saldo.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        lbl_saldo.setForeground(new java.awt.Color(153, 0, 0));
        lbl_saldo.setText("0.00");
        jPanel2.add(lbl_saldo);
        lbl_saldo.setBounds(60, 40, 80, 30);

        jLabel6.setText("Pendiente:");
        jPanel2.add(jLabel6);
        jLabel6.setBounds(10, 34, 70, 20);

        lbl_valor.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        lbl_valor.setForeground(new java.awt.Color(0, 102, 102));
        lbl_valor.setText("0.00");
        jPanel2.add(lbl_valor);
        lbl_valor.setBounds(60, 10, 80, 30);

        jPanel1.add(jPanel2);
        jPanel2.setBounds(340, 30, 150, 80);

        bt_registrar.setText("Registrar");
        bt_registrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_registrarActionPerformed(evt);
            }
        });
        jPanel1.add(bt_registrar);
        bt_registrar.setBounds(340, 120, 140, 40);

        txt_resp.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txt_respActionPerformed(evt);
            }
        });
        jPanel1.add(txt_resp);
        txt_resp.setBounds(130, 120, 160, 20);

        jLabel8.setText("Fecha - Hora:");
        jPanel1.add(jLabel8);
        jLabel8.setBounds(50, 60, 110, 20);

        txt_fecha.setEditable(false);
        jPanel1.add(txt_fecha);
        txt_fecha.setBounds(130, 60, 80, 20);

        txt_hora.setEditable(false);
        jPanel1.add(txt_hora);
        txt_hora.setBounds(220, 60, 70, 20);

        jLabel5.setText(" -");
        jPanel1.add(jLabel5);
        jLabel5.setBounds(210, 60, 30, 20);

        txt_valor.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txt_valorKeyTyped(evt);
            }
        });
        jPanel1.add(txt_valor);
        txt_valor.setBounds(130, 90, 160, 20);

        txt_clave.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txt_claveKeyTyped(evt);
            }
        });
        jPanel1.add(txt_clave);
        txt_clave.setBounds(130, 150, 160, 20);

        jLabel7.setText("Cambiar Resp:");
        jPanel1.add(jLabel7);
        jLabel7.setBounds(50, 150, 70, 20);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    public int numeroPago(){
    int numPago=0;    
        try{
            ResultSet r=conexion.consultarBase("select MAX(codigo) from pago_separado where cod_separado="+cod_Cuenta+" and cod_cliente='"+cod_cliente+"' ;");
            r.next();
            int numero=r.getInt(1)+1;
           //System.out.println("Numero Pago Generado: "+numero);
            numPago=numero;
        } catch(java.sql.SQLException e){};
        
    return numPago;    
    }
    
    public void registrarPago(){
    // TODO add your handling code here:
    Imprimir TrabImpresion=new Imprimir();


    int cod_pago=numeroPago();
    int cod_cuenta=cod_Cuenta;
    String fecha_pag=txt_fecha.getText();
    String hora_pag=txt_hora.getText();
    double valor_pag=Double.parseDouble(txt_valor.getText().toString().replaceAll(",","."));
    String responsable=txt_resp.getText().toString();
    
    double deudaCant=Double.parseDouble(lbl_valor.getText().toString());
    double nuevo=deudaCant-valor_pag;    
    
    //banderas para verificar insercion.
    
    boolean exito=false;
    boolean exitoact=false;
    if(nuevo>=0){
        
    conexion.consultarBase("START TRANSACTION;");
    exito=conexion.insertarDatosR("insert into pago_separado values("+cod_pago+","+cod_cuenta+",'"+cod_cliente+"','"+fecha_pag+"',"+valor_pag+",'"+responsable+"','"+hora_pag+"');");
    exitoact=conexion.actualizarBaseResp("update separado set saldo="+nuevo+" where codigo="+cod_cuenta+" and cod_cliente like '"+cod_cliente+"';" );

        if(exito&&exitoact){
        conexion.consultarBase("COMMIT;");
        }else{
        conexion.consultarBase("ROLLBACK;");
        JOptionPane.showMessageDialog(this,"Se dio un Problema en la Insercion del pago de Separado ","Informacion",JOptionPane.INFORMATION_MESSAGE);
        }
    
    
    
    //Realizo la impresion del Recibo de Abono:
    TrabImpresion.imprimirSeparado(cod_cuenta);
    //Texto
    String datosAbono="\n\t\tAbono #"+cod_cuenta+"\n\n"
            + "Fecha:"+fecha_pag+"   Hora:"+hora_pag+"\n\n"
            + "Nombre:"+this.vent_Sep.txt_nombre.getText()+"\n"
            + "Cedula:"+this.vent_Sep.txt_ci.getText()+"\n\n"
            + "El Numero del Pago :"+cod_pago+"\n"
            + "La deuda es:"+deudaCant+"\n"
            + "El valor Abono es:"+valor_pag+"\n"
            + "El Nuevo Saldo es:"+nuevo+"\n\n\n"
            + "____________________________"+"\n"
            + "     Firma Cliente\n\n"
            + "\n\n\n\n";
    //Escribo datos:
    TrabImpresion.escriboFact(datosAbono);
    //Realizo la Impresion:
    TrabImpresion.realizaImprecion();

    
    
    if(nuevo==0&&facturaVent!=null){
    //La cuenta se debe cerrar:
    //Lleno los datos de Facturacion:
    facturaVent.limpiarSepara();
    facturaVent.activarListener=false;

    ResultSet resp=conexion.consultarBase("SELECT subtotal,iva,desct,total,saldo,cod_producto,nombre,precio,cantidad "
            + "FROM separado s, dtl_separado d where s.codigo=d.cod_separado "
            + "and s.codigo="+cb_factura.getSelectedItem().toString().split(" ")[0]+";");
                try {
                    resp.beforeFirst();
                    int cont=0;
                     while(resp.next()){
                        double subtotal= resp.getDouble(1);
                        double iva= resp.getDouble(2);
                        double desct= resp.getDouble(3);
                        double total= resp.getDouble(4);
                        String codigoP= resp.getString(6);
                        String nombreP= resp.getString(7);
                        double precio= resp.getDouble(8);
                        int cantidad= resp.getInt(9);

                        facturaVent.tabla.setValueAt(codigoP, cont,0);
                        facturaVent.tabla.setValueAt(cantidad, cont,1);
                        facturaVent.tabla.setValueAt(nombreP, cont,2);
                        facturaVent.tabla.setValueAt(precio, cont,3);
                        double subtP=precio*cantidad;
                        facturaVent.tabla.setValueAt(subtP, cont,4);

                        facturaVent.txt_sub.setText(String.valueOf(subtotal));
                        facturaVent.txt_desc.setText(String.valueOf(desct));
                        facturaVent.txt_SubDesc.setText(String.valueOf(subtotal-desct));
                        facturaVent.txt_iva.setText(String.valueOf(iva));
                        
                        
                        if(iva==0){
                        facturaVent.txt_porIva.setText("0");
                         }
                        
                        //Saco el Total
                        double totalMasIva=Double.valueOf(facturaVent.txt_SubDesc.getText())+Double.valueOf(facturaVent.txt_iva.getText());
                        facturaVent.txt_abonos.setText(String.valueOf(totalMasIva));
                        double totFactura=Double.valueOf(facturaVent.txt_SubDesc.getText())+Double.valueOf(facturaVent.txt_iva.getText())-Double.valueOf(facturaVent.txt_abonos.getText());
                        facturaVent.txt_tot.setText(String.valueOf(totFactura).replaceAll(",","."));
                        
                        

                        cont++;
                     }
                } catch (SQLException ex) {
                    Logger.getLogger(Vent_RegAbonoSep.class.getName()).log(Level.SEVERE, null, ex);
                }

    facturaVent.muestroDatosUsuario();
    
    facturaVent.activarListener=true;
    vent_Sep.setVisible(false);
    vent_Sep.vent_cliente.setVisible(false);
    this.setVisible(false);
    JOptionPane.showMessageDialog(this,"Se Genero la Factura de Salida","Informacion",JOptionPane.INFORMATION_MESSAGE);
    facturaVent.registraSeparacion=true;
    facturaVent.registrarFactura("Factura", 1,0);
    facturaVent.registraSeparacion=false;
    JOptionPane.showMessageDialog(this,"Se Registro la Factura de Cierre Separacion Exitosamente ","Informacion",JOptionPane.INFORMATION_MESSAGE);
    this.dispose();
    vent_Sep.dispose();
    vent_Sep.vent_cliente.dispose();

 
    //ceroCuenta(cod_cuenta,cod_cliente);
    }else{
    
    //JOptionPane.showMessageDialog(this,"Para cerrar el ultimo abono debe abrir una ventana de Facturacion ","Informacion",JOptionPane.INFORMATION_MESSAGE);
    }
    
    //Actualizo saldo deudor del cliente:
    //Consulto todos los pagos y todas las cuentas:
    //Saco el total de cuentas pendientes:
//    ResultSet re=conexion.consultarBase("SELECT sum(valor) FROM cuentaspendientes c where cod_cliente like '"+cod_cliente+"' and pagado like 'falta';");
//    double valor=0;
//    try {
//        re.beforeFirst();
//        re.next();
//        valor=re.getDouble(1);
//    } catch (SQLException ex) {
//        Logger.getLogger(Vent_RegAbonos.class.getName()).log(Level.SEVERE, null, ex);
//    }
    
//    conexion.actualizarBase("update cliente set saldo_deudor="+valor+" where cod_cliente like '"+cod_cliente+"';");

    }else{
    JOptionPane.showMessageDialog(this,"Se esta tratando de paga demas una cuenta , Intente con otra Factura.","Informacion",JOptionPane.INFORMATION_MESSAGE);
    }
    
        //Actualizo las Ventanas Cliente
       
            refrescar();
            vent_Sep.refrescar();
            
    }
    
    public void ceroCuenta(int cod_Cuenta,String cod_Cliente){
    //Le pongo pagado en la cuenta si es el caso que se acabo de pagar:
        if(conexion.actualizarBaseResp("update cuentaspendientes set pagado='pagado' where cod_cuentasCobrar="+cod_Cuenta+" and cod_cliente like '"+cod_Cliente+"';")){
        
        }else{
        JOptionPane.showMessageDialog(this,"Hay un error al registrar la cuenta como PAGADA COMPLETAMENTE","Informacion",JOptionPane.INFORMATION_MESSAGE);
        }
    
    
    }
//    //Cancelan cuentas por cobrar:
//    public void asientoPagoxCobrar(String valor){
//            String numeroDiario=numeroDiario();
//            this.asiento(numeroDiario,fecha,"Se nos Paga CuentaxCobrar");
//            String numeroAsiento=numeroAsiento();
//            asientoDeatlle(numeroAsiento,numeroDiario,"1","1","1","0",valor,"0");   //Asiento de Caja  debe
//            asientoDeatlle(numeroAsiento,numeroDiario,"3","1","1","0","0",valor);   //Ctas x Cobrar
//
//    }
//    //Cancelan Cuentas por Pagar
//    public void asientoPagoxPagar(String valor){
//            String numeroDiario=numeroDiario();
//            this.asiento(numeroDiario,fecha,"Por el Pago de CuentaxPagar");
//            String numeroAsiento=numeroAsiento();
//            asientoDeatlle(numeroAsiento,numeroDiario,"6","1","2","0",valor,"0");   //Ctasx Pagar
//            asientoDeatlle(numeroAsiento,numeroDiario,"1","1","1","0","0",valor);   //Caja  debe
//    }
//
//
//    public String numeroDiario(){
//         String numero="";
//         try{
//            java.sql.ResultSet r=conexion.consultarBase("select  cod_diario from diario where fecha_diario=(select max(fecha_diario) from diario) limit 1");
//            r.next();
//            numero=r.getString(1);
//          }catch(SQLException f){}
//         return numero;
//    }
//
//     public String numeroAsiento(){
//         String numero="";
//         try{
//            java.sql.ResultSet r=conexion.consultarBase("select max(cod_asiento) from asiento");
//            r.next();
//            numero=r.getString(1);
//          }catch(SQLException f){}
//         return numero;
//    }
//    public void asiento(String numeroDiario,String fecha,String referencia){
//        conexion.insertarDatos("insert into asiento(cod_diario,fecha_dia,referencia) values("+numeroDiario+",'"+fecha+"','"+referencia+"')");
//    }
//    public void asientoDeatlle(String numeroAsiento,String numeroDiario,String n3,String n2,String n1,String parcial,String debe,String haber){
//        String consultaDtlAs= "insert into dtl_asiento "+
//                              "(cod_diario,cod_asiento,cod_tercernivel,cod_segundonivel,cod_primernivel,parcial,debe,haber) " +
//                              "values ("+numeroDiario+","+numeroAsiento+","+n3+","+n2+","+n1+","+parcial+","+debe+","+haber+")";
//        conexion.insertarDatos(consultaDtlAs);
//    }
    
private void bt_registrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_registrarActionPerformed
//Valido la accion:
    int opccion=0;
    opccion=JOptionPane.showConfirmDialog(this,"Seguro Desea Guardar este Abono?","Alerta",0);
    if(opccion==0){
    String r=txt_resp.getText().toString().replaceAll(" ","");
    String v=txt_valor.getText().toString().replaceAll(" ","");
   //System.out.println("Los valores de r:"+r+"Los valores de v:"+v);
    if(r.equals("")||v.equals("")){
       JOptionPane.showMessageDialog(this,"No se han completado los datos requeridos.","Informacion",JOptionPane.INFORMATION_MESSAGE);
    }else{
    registrarPago();
    }
    }
}//GEN-LAST:event_bt_registrarActionPerformed

private void cb_facturaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cb_facturaActionPerformed
// TODO add your handling code here:
    try{
    int selecion=cb_factura.getSelectedIndex();
    Object item=cb_factura.getItemAt(selecion);
    String[] deuda=item.toString().split(" ");
    String valorDeuda=deuda[4];
    lbl_valor.setText(valorDeuda);
    lbl_saldo.setText("0");
    cod_Cuenta=Integer.parseInt(deuda[0].toString());
    }catch(Exception e){}
    
}//GEN-LAST:event_cb_facturaActionPerformed

private void txt_respActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txt_respActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txt_respActionPerformed

private void txt_valorKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txt_valorKeyTyped
// TODO add your handling code here:
    // TODO add your handling code here:
    int presiona = evt.getKeyChar();
    if (presiona == 10) {
        double abono = 0;
       //System.out.println("Abono es:" + txt_valor.getText());
        try {
            abono = Double.parseDouble(txt_valor.getText().toString());
        } catch (Exception e) {
        }
       //System.out.println("Abono es:" + abono);
        double cantidad = Double.parseDouble(lbl_valor.getText().toString());
        double saldo = cantidad - abono;
        lbl_saldo.setText(String.valueOf(saldo));

    }
}//GEN-LAST:event_txt_valorKeyTyped

private void txt_claveKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txt_claveKeyTyped
// TODO add your handling code here:
     int presiona=evt.getKeyChar();
        if(presiona==10){
            String clave=txt_clave.getText();
            ResultSet resp=conexion.consultarBase("select * from usuario where clave='"+clave+"'");
            try {
                resp.beforeFirst();
                resp.next();
                String nombre=resp.getString(2);
                txt_resp.setText(nombre);
                
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(this,"Hay un error en la clave","Informacion",JOptionPane.INFORMATION_MESSAGE);
            }
            
        }
    txt_clave.setText("");
}//GEN-LAST:event_txt_claveKeyTyped

private void cb_facturaItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cb_facturaItemStateChanged
// TODO add your handling code here:
}//GEN-LAST:event_cb_facturaItemStateChanged


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton bt_registrar;
    private javax.swing.JComboBox cb_factura;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JLabel lbl_saldo;
    private javax.swing.JLabel lbl_valor;
    private javax.swing.JPasswordField txt_clave;
    private javax.swing.JTextField txt_fecha;
    private javax.swing.JTextField txt_hora;
    private javax.swing.JTextField txt_resp;
    private javax.swing.JTextField txt_valor;
    // End of variables declaration//GEN-END:variables

}
